58安全-违规水印检测的技术实践
导读
58同城作为国内领先的分类信息网站,每天接受的图片流量高达数亿。上传的图片中不可避免会包含违规水印,仅仅依靠人工审核不能满足网站的要求,急需要自动审核的功能。而目标检测与业务问题结合,是一种有效检测识别违规水印的重要手段。目标检测不仅可以判断出图片中是否含有违规水印,还可以确定违规水印的数量、位置、大小,得到的结果充分满足审核的需要。
业务背景
58同城作为国内领先的分类信息网站、专业的“本地、免费、真实、高效”的生活服务平台,包括本地服务、房产、招聘、二手市场、金融、汽车等业务板块,拥有庞大的活跃用户群,每天接受的图片流量高达数亿。
由于58用户成分众多,包括个人、商家、中介等各种属性,上传的图片中不可避免会包含违规水印,例如:含有其他非合作网站水印或logo的图片,这类图片属于盗图;含有马赛克的图片,网站要求经纪人发布的房源图片是实拍并且没有经过二次加工的原图,而含有马赛克的图片大部分是为了遮挡水印而且不是原图;含有微信logo的图片则是经过二次加工或来自其他地方的非原图;含有二维码的图片则是违反了联系方式不允许出现在图片上的规则。下图图1为违规图片实例,图2为正常图片实例。数量庞大的违规水印仅仅依靠效率低成本高的人工审核远远不能满足网站的要求,为了达到规范网站环境的目的,迫不及待需要自动审核的功能。
图1 违规水印
图2 正常图片
技术背景
伴随着人工智能的高速发展,以及深度学习在计算机视觉领域的突出贡献,计算机自动审核违规水印应运而生。目前图像领域主要探索研究方向有图像分类、目标检测、图像分割,图像生成等等,其中目标检测与业务问题结合,是一种有效检测识别违规水印的重要手段。目标检测不仅可以判断出图片中是否含有违规水印,还可以确定违规水印的数量、位置、大小,得到的结果充分满足审核的需要。
基于深度学习的目标检测模型相对传统目标检测方法效果有明显的优势,深度学习的图像目标检测主要有两条技术路线,一种是以faster-rnn为代表的stage-two的目标检测算法,另一种是以Yolo为代表的stage-one的目标检测算法。Stage-two的网络框架是由生成目标候选框网络和微调网络组成,它的优势是目标检测准确率高,确定计算复杂度高相对较为耗时。Stage-one的网络就是由图片直接生成检测目标,没有生成候选框的网络,它的优势是计算资源少,计算耗时低。
Faster-rcnn在RCNN家族中是一种典型的stage-two计算网络,它是由RPN(Region Proposals Network) 和fast-rcnn两部分组成。
SSD(single shot mutiBox Detector)采用one-stage模式,提升执行效率。借鉴Faster-rcnn提出的anchor,同时SSD使用6个不同特征图检测不同尺度的目标,即SSD将 conv4_3、conv7、conv8_2、conv9_2、conv10_2、conv11_2都连接到了最后的检测、分类层做回归。前面特征层预测较小目标,后面特征层预测较大目标。
另一YOLO系列,由yolov1升级到yolov3,yolov3采用darknet-53和特征金字塔网络FPN(Feature Pyramid Networks)。Yolov3顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的,前面的小目标结合后面的全局特征做预测,对不同尺度目标有较好检测。
违规水印检测技术方案
违规水印检测服务从开发、上线、多次迭代更新,期间有数次技术改进迭代,其中关键的技术改进方案介绍如下。
3.1 数据处理
首先收集业务线违规水印图片,分析违规水印类型占比,最终确定模型需要检测的违规水印的种类,在收集样本期间,满足数量要求的同时尽量保证各个类别数量的均衡。
数据增强不仅会使样本数量增加,还会强化样本的丰富性、多样性,最终提高模型的泛化能力、鲁棒性及有效避免过拟合。通常所采用的数据增强策略包括亮度调整、对比度调整、饱和度调整、噪声调整、随机的剪裁、随机镜像。根据论文所述,其对小目标精度的提升及被遮挡目标的检测效果明显。
为了进一步提高检测效果,在实际中使用了mixup来进行数据扩增。mixup是一种非常规的数据增强方法,其以线性插值的方式来构建新的训练样本和标签。公式如下:
和是原始数据样本集中的两个样本及其标签,,属于Beta分布时效果最好。由公式可见,mixup相当于一个正则项,它希望模型尽可能往线性函数靠近,也就是说,既保证模型预测尽可能准确,又让模型尽可能简单。论文中指出mixup可以改进当前最先进的神经网络架构的泛化能力,能够减少对错误标签的记忆,增加对抗样本的鲁棒性,并能够稳定对生成对抗网络的训练过程。
3.2 检测方案
在服务开发前期调研了几类经典的目标检测算法Faster-rcnn、yolov1、SSD等,Faster-rcnn召回率高但速度慢、资源消耗高,yolov1检测速度快,但是召回率较差,SSD借鉴了Yolov1单步预测方案提升检测效率,它有效结合了Faster-rcnn的anchor思想,保证了召回的同时,又提出了兼顾不同尺度大小的目标预测方法,提取网络层的前中后层的feature map,实现不同尺度目标的识别,随着网络层的加深,网络特征由具体到抽象,由部分到全局。因为前面网络层特征感受野相对较小,能够有效识别较小目标。水印在图片中占比相对较小,提取前面的特征层预测有利于提升召回。
第一次关键迭代方案:确定网络模型。前期训练基于mobilenetV2的ssd,模型训练预上线后,租房线上推审准确率为51.79%,分析误召case,存在较多未在检测类别中出现的新类。遂将这些类水印加入类别中,且做更多样本增强,例如随机crop,颜色变化、白噪声、mixup等。在租房场景将推审准确率提升至93.06%。
随着服务覆盖更多房产业务,水印类别的增加及难识别水印的出现,如下图3所示,大众点评和房天下的水印较浅。调研基于FPN(Feature Pyramid Networks)的Yolov3,其采用更深网络darkNet-53。FPN对图像内小目标的预测不但含有当前特征层,还结合后面的全局特征,识别更加精确。同时网络深度的加深增强了特征的表达能力。召回率有较大提升,但是上线QPS只有20QPS,需要对模型进行压缩。选取基于裁剪网络特征通道方法,根据每个卷积层后面Batch Normalization层尺度因子γ大小判断该层的贡献率,在不影响整个网络性能的同时去掉贡献率小的卷积层,实现模型的剪枝压缩。利用BN中的缩放因子γ作为重要性因子,即γ越小,所对应的channel裁剪(pruning)。约束γ的大小,在目标方程中增加一个关于γ的L1正则项,使其稀疏化。在召回率变化不大的情况下,模型体积由236M下降到34M,QPS由20提升至70.85。
图3
考虑到水印场景检测目标较小,生成自配的anchor(锚点),推测可有效提升召回。遂通过k-means 聚类IOU聚类,形成9个anchor 和6个anchor,并与论文推荐的anchor做了对比发现,生成适配的9个anchor能够将召回率提升近3个点,同时将anchor降低到6个,平均IOU从95.04%下降到93.87%,召回率和准确率有较小降低,但平均单次耗时下降9ms。
因此最后模型采用经过模型稀疏化裁剪,自定义anchor个数的yolov3网络模型。
第二次关键迭代方案:细分类别。检测类别中的马赛克类别,在前期的迭代中,将其作为一类,即马赛克类别。模型训练完后对其进行测试误伤率却高为3%,因为在应用中需要对召回的图片进行人审,误召高会增加人审数量,因此需要降低误伤。分析误伤样本,发现图片中不同的马赛克差别较大,需进行进一步拆分,根据样本类型最终将马赛克划分为三个类别,如图4所示,拆分原则是使同一类别尽量保持一致性及具有共同的特征尽量多,保证类内间距小,进一步提高检测的准确率,实验证明方法有效,测试数据误伤由3%降低为1.4%。
图4
第三次关键迭代:利用误召图片。由于模型处理的图片背景复杂,且有些类别数据样本收集难度大,因此需要合成样本,但合成的样本种类有所限制,准确率难以满足要求,因此进一步利用误伤图片合成训练样本,进行训练,,例如5所示,(a)为误召的类别,(b)为误召的图片,(c)为由误召类别及误召图片合成的训练样本,测试数据误伤进一步降低,由1.2%降低为0.34%。
图5
第四次关键迭代:技术升级。当前目标检测方法大部分是基于锚点anchor回归目标框,该方式生成大量重复的预测框,网络生成预测网络,后需要NMS(非极大值抑制),因此anchor-free的目标检测方法做了研究尝试,如CornerNet、ExtremeNet、CenterNet。
基于anchor-free的方法CenterNet,将目标当成关键点,不仅能够做2D 目标检测, 而且只需要少量扩展实现迁移到 3D 目标检测和人体关键点检测上。算法没有采用之前anchor的方法,只负责预测物体的中心点,不需要区分anchor是物体还是背景,每个目标对应一个中心点,这个中心点是通过 heatmap 中预测出来的,所以不需要 NMS 再进行来筛选。主干网络可以是Hourglass沙漏网络、残差网络、DLA等,后面输出三个预测feature map分别是heatmap(通道数为预测目标数)、目标大小的回归、目标偏移的回归。
基于anchor free 算法与基于anchor算法在对待正负样本的区别是,基于anchor的目标检测算法,anchor框与ground truth的IOU大于某个阈值(0.7)作为正样本,IOU小于某个阈值(0.3)作为负样本。而基于anchor-free,ground truth 的中心是1,周围的feature map呈高斯分布,高斯核大小与物体的大小有关,但是会有一个呈高斯分布的衰减。
将关键点映射到特征图上。
检测损失由三部分组成预测标签概率损失、目标大小和便宜损失
其中
将目标当成一个点预测和回归。水印识别训练采用含可变性卷积dla-34作为基础网络,下采样率为4,水印目标较小,不适合采用较大下采样率,输入分辨率512*512,回归损失采用L1范数,heatmap损失权重为1,偏移损失的权重为1,宽高损失的权重为0.1。租房场景推审准确率84.36%。
第五次关键迭代:利用抠图技术得到目标素材,人工合成样本,并优化模型训练流程。旨在降低收集标注样本时间及人力成本,提高样本的真实性,缩短模型迭代周期。利用抠图技术得到的合成样本与真实样本如图6所示, (a)为logo素材的透明图片,(b)为合成样本的截图,(c)为真实样本的截图。
图6合成样本与真实样本
通过样本合成使收集样本及标注的时间成本极大的降低,如表1所示。
表1
在模型训练流程方面,通过进行成本与效果消融实验,在保证整体效果的前提下,缩短迭代周期,具体实验方案及效果如表2及表3所示。通过实验确定了最佳方案,时间周期有效降低。
表2
表3
综上所述,五次关键迭代,均从网络模型、类别确定、样本收集,训练流程四个维度提升检测准确率及降低时间周期,效果显著。
落地效果
总结及展望
在违规水印检测模型训练过程中积累了几条浅显的经验,如下:训练样本集尽量丰富,数据量尽量大,可增强模型的泛化能力;各类别数量保持均衡,防止模型出现偏向性;人工合成的数据的图片名称做上标记,使其能与真实图片名称区分,待真实样本积累量足够后可减少部分合成图片。
违规水印检测模型目前迭代存在几个关键问题,未来可以从以下几个方面进一步的探索和实践:
第一个是利用抠图技术得到的目标素材,质量参差不一,需要进一步优化数据增强的方法,比如利用对抗网络生成训练样本;
第二个是网络模型需要随着技术的发展不断进行优化;
第三个是处理数据不均衡问题,主要包括四种类型:类别不均衡、规模不均衡、空间不均衡、目标不均衡;下一步将具体分析数据中的不均衡问题,并针对性解决。
参考文献:
Taro 3.2 适配 React Native 之样式内幕
Taro3.2 适配 React Native 之运行时架构详解